package de.hdu.pms.ho.ctrl;

import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

import de.hdu.pms.ho.dao.ArbeitsplanDao;
import de.hdu.pms.ho.dao.PersonalDao;
import de.hdu.pms.ho.dao.ZimmerDao;
import de.hdu.pms.ho.model.Arbeitsplan;
import de.hdu.pms.ho.model.Personal;
import de.hdu.pms.ho.model.Zimmer;



/**
 * Controller for editing, saving, deleting and showing all objects of {@link Arbeitsplan}
 * 
 * @author Helena Semmel
 *
 */
@Controller
public class ArbeitsplanController {
	private static Logger Log = Logger.getLogger(ArbeitsplanController.class);
	
	private ArbeitsplanDao arbeitsplanDao;
	
	public void setArbeitsplanDao(ArbeitsplanDao arbeitsplanDao) {
		this.arbeitsplanDao = arbeitsplanDao;
	}
	public ArbeitsplanDao getArbeitsplanDao() {
		return arbeitsplanDao;
	}

	private PersonalDao personalDao = null;
	public PersonalDao getPersonalDao() {
		return personalDao;
	}
	public void setPersonalDao(PersonalDao personalDao) {
		this.personalDao = personalDao;
	}
	private ZimmerDao zimmerDao = null;
	public ZimmerDao getZimmerDao() {
		return zimmerDao;
	}
	public void setZimmerDao(ZimmerDao zimmerDao) {
		this.zimmerDao = zimmerDao;
	}


	
	/**
	 * Returns all existing {@link Arbeitsplan} objects from the db
	 * @return a list of {@link Arbeitsplan}
	 */
	@RequestMapping(value="AlleArbeitsplaene.html", method=RequestMethod.GET)
	public ModelAndView findAll() {
		ModelAndView mv = new ModelAndView();
		mv.addObject("title", "Arbeitspläne");
		mv.addObject("message", "Hier finden sie sämtliche Arbeitspläne");
		mv.addObject("arbeitsplaene", arbeitsplanDao.findAll());
		mv.addObject("edit", true);
		mv.setViewName("protected/list-arbeitsplaene");
		return mv;
	}
	
	
	/**
	 * Creates a new object of {@link Arbeitsplan} or updates an existing one
	 * @param id optional, only for update
	 * @return
	 */
	@RequestMapping(value="/BeginneArbeit.html", method=RequestMethod.GET)
	public ModelAndView beginneArbeit(@RequestParam(required=false) Integer id) {	//required=ob input nötig oder nicht
		Log.debug("BeginneArbeit.html");
		ModelAndView mv = new ModelAndView();
		if (id != null) {
			mv.addObject("message", "Hier können Sie den ausgewählten Arbeitsplan ändern");
			mv.addObject(arbeitsplanDao.findById(id));
			mv.addObject("personal1", personalDao.findAll());				//nötig für dropdown im view
			mv.addObject("zimmer1", zimmerDao.findAll());
		}else {
		mv.addObject("message", "Bitte geben sie die Zimmernummer und Reinigungskraft ein, sowie den Arbeitszeitraum");
		mv.addObject("personal1", personalDao.findAll());
		mv.addObject("zimmer1", zimmerDao.findAll());
		mv.addObject("arbeitsplan",new Arbeitsplan());
		
	}
		mv.addObject("title", "Arbeitsplan");
		mv.addObject("edit", true);
		mv.setViewName("protected/edit-arbeit");
		return mv;
	}
	
	 
	/*@RequestMapping(value="SaveArbeit.html", method=RequestMethod.POST)   //bringt ne DataIntegrityViolationException
	public String save(@RequestParam(required=false) Integer id, Personal personal, Zimmer zimmer, String beginn, String ende) {
		Log.debug("SaveArbeit.html");
		if (id != null) {
			//arbeitsplanDao.modify(id, personal, zimmer, beginn, ende);
			arbeitsplanDao.create(personal, zimmer, beginn, ende);	
		} else {
			arbeitsplanDao.create(personal, zimmer, beginn, ende);
			
	 		}
		return "redirect:AlleArbeitsplaene.html";
	}*/
	
	/**
	 * Saves a {@link Arbeitsplan} object
	 * @param id the primary key of {@link Arbeitsplan} 
	 * @param personal the foreign key to {@link Personal}
	 * @param zimmer the foreign key to {@link Zimmer}
	 * @param beginn the date for beginning
	 * @param ende the date for ending
	 * @return redirect to the list of all existing Arbeitsplänen
	 */
	@RequestMapping(value="SaveArbeit.html", method=RequestMethod.POST)      //anlegen und ändern geht! nur nicht löschen
	public String save(@RequestParam(required=false) Integer id, Integer personal, Integer zimmer, String beginn, String ende) {
		Log.debug("SaveArbeit.html");
		Personal p = getPersonalDao().findById(personal);			
		Zimmer z = getZimmerDao().findById(zimmer);
		
		if(id != 0) {
			getArbeitsplanDao().modify(id, p, z, beginn, ende);		//falls man id übergibt wird Methode modify aufgerufen
				
		} else{
			getArbeitsplanDao().create(p, z, beginn, ende);
			
	 		}
		return "redirect:AlleArbeitsplaene.html";
	}
	
	/**
	 * Deletes a {@link Arbeitsplan} object from the database
	 * @param arbeitsplan
	 * @param id primary key of the object
	 * @return redirect to the list of all Arbeitsplänen
	 */
	@RequestMapping(value="/LoescheArbeit.html", method=RequestMethod.GET)
	public ModelAndView delete(Arbeitsplan arbeitsplan, Integer id) {
		arbeitsplanDao.deletebyId(id);
		return new ModelAndView("redirect:AlleArbeitsplaene.html");
	}
	
	
	
	
	
}
